home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
progtool
/
modula2
/
module
/
easydial.def
< prev
next >
Wrap
Text File
|
1995-11-25
|
16KB
|
280 lines
(******************************************************************************)
(* This MODULE is Public Domain. Copy me like a beast! *)
(* Christian Ledermann *)
(* Wölfelkofen 2 *)
(* 84166 Adlkofen *)
(******************************************************************************)
(* *)
(* Started: 20.12.92 03:54:30 *)
(* Version: 20.12.89 03:504:12:54 *)
(* *)
(******************************************************************************)
(* *)
(* Diese Software ist ohne jede Garantie. Ich verspreche *)
(* keinerlei Wartung und übernehme keine Verantwortung für Schäden die *)
(* durch die Benutzung dieses Programmes entstehen. *)
(* Jegliche Ersatzansprüche lehne ich ab. *)
(* *)
(******************************************************************************)
DEFINITION MODULE EasyDialog;
FROM SYSTEM IMPORT ADDRESS,WORD;
TYPE
TreePROC = PROCEDURE (ADDRESS, INTEGER);
CONST
(* Diese beiden CONSTanten sind in GEMAESBase falsch definiert !! *)
EndMouseControl=2;
BeginMouseControl=3;
(* Zum Arbeiten also unbedingt(!!) diese hier benutzen *)
PROCEDURE and(a,b:WORD):BOOLEAN;
(********** Bitweiser Vergleich wie in C *********)
PROCEDURE WorkTree(TreePtr :ADDRESS; StartObject,EndObject : INTEGER;
Do : TreePROC);
(************** ObjectStruktur eines Baumes durchforsten *************)
(* WorkTree wandert die Objectstruktur eines Baumes ab und führt *)
(* dabei die Routine Do aus, die das aktuelle Object bearbeitet *)
(* Soll der ganze Baum bearbeitet werden, müssen StartObject und *)
(* EndObject 0 sein. *)
(* Portiert von c -> M2 Orginal in ST-Computer 5/88 *)
(*********************************************************************)
PROCEDURE FormButton(Tree :ADDRESS; Object,Clicks : INTEGER;
VAR NextObject :INTEGER):INTEGER;
(***** Primitive AES-Funktion wird für FormMoveDial benötigt *********)
(* Die Funktion wertet Mausknopfeingaben in Dialogen aus. *)
(* Tree : Adresse des Dialoges, zu ermitteln mit *)
(* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
(* Object : enthält das aktuelle Object *)
(* Clicks : maximale Anzahl von Mausclicks *)
(* NextObject : neues Aktuelles Object nach dem Funktionsaufruf *)
(* Funktionsergebnis ist ein Wert # 0 wenn ein Exit-Object ausgewählt*)
(* wurde. Dieser Wert entspricht der Nummer des angewählten Objectes *)
(* -> ST 2/92 *)
(*********************************************************************)
PROCEDURE FormKeyboard(Tree :ADDRESS; Object,Next,Char:INTEGER;
VAR NextObject,NextChar :INTEGER):INTEGER;
(***** Primitive AES-Funktion wird für FormMoveDial benötigt *********)
(* Die Funktion wertet Tastatureingaben in Dialogen aus. *)
(* Tree : Adresse des Dialoges, zu ermitteln mit *)
(* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
(* Object : enthält das aktuelle Object *)
(* Next : nächstes Object *)
(* NextObject : aktuelles Object nach dem Funktionsaufruf *)
(* NextChar : nächstes Zeichen *)
(* Funktionsergebnis ist ein Wert # 0 wenn ein Exit-Object ausgewählt*)
(* wurde. Dieser Wert entspricht der Nummer des angewählten Objectes *)
(* Hier also immer die Nummer des Default-Objectes *)
(* -> ST 2/92 *)
(*********************************************************************)
PROCEDURE FileSelectXtendedInput(VAR InPath,InSelect:ARRAY OF CHAR;
VAR ExButton:INTEGER; label: ARRAY OF CHAR):INTEGER;
(************** Der Fileselctor ab TOS 1.04 ***********************)
(* InPath : Pfad Voreinstellung z.B. C:\Hammer\*.123 *)
(* INSelect : Voreinstellung für den Dateinamen z.B. UNTITLED.123 *)
(* ExButton : 0 = Abbruch, 1 = OK *)
(* label : Titeltext der File Select box *)
(* Rückgabe : 0 Fehler bei der Durchführung, #0 Kein Fehler *)
(******************************************************************)
PROCEDURE EasyFileSelect(VAR Maske, DateiName: ARRAY OF CHAR; Text : ARRAY OF CHAR):BOOLEAN;
(***************** Vereinfachter FileSelector *********************)
(* Maske : Pfad Voreinstellungen z.B. \Hammer\*.123 *)
(* Intern wird das aktuelle Laufwerk und Pfad ermittelt und Maske *)
(* daran angehängt, In der Fileselectbox erhält man also : *)
(* C:\MODULA\Hammer\*.123 *)
(* Zurückgegeben wird in Maske der Pfadname der Ausgewählten Datei*)
(* ohne angehängte WildCards also z.B. C:\LPR\HAMMER\ *)
(* DateiName : Voreinstellnung für den Dateinamen z.B. UNTILED.123*)
(* Zurückgegeben wird der ausgewählte Dateinahme z.B: TEST.123 *)
(* Text : Titeltext der Fileselectorbox ab TOS 1.04 ansonsten wird*)
(* Text ignoriert und die 'normale' Fileselectorbox aufgerufen *)
(* Hierbei wird auch der Cookie abgefragt d.h wenn Selectric *)
(* installiert ist wird die Fileselectbox mit Titeltext aufgerufen*)
(* Rückgabe : TRUE Kein Fehler OK angewählt *)
(* FALSE Abbruch gewählt oder Fehler *)
(* c->M2 -> ST 4/93 *)
(******************************************************************)
PROCEDURE MoveFormDo(TreePtr :ADDRESS; EditObject :INTEGER):INTEGER;
(****************** Dialog Box Ausführen *****************************)
(* Der GegenPart zu AES.FormDo mit den unter DoMoveDialog *)
(* beschriebenen Erweiterungen. Die Checkboxen werden allerdings nur *)
(* unter DoMoveDialog initialisiert -> entweder muß der Status *)
(* Selected schon im RCS gegeben werden oder hier vorher "von Hand" *)
(* Meine Empfehlung: Beim ersten Aufruf einer DialogBox DoMoveDialog *)
(* verwenden, und später dann mit MoveFormDo weitermachen dann merkt *)
(* die Dialogbox sich auch ihren Ort und taucht immer an der selben *)
(* Stelle auf. *)
(*********************************************************************)
PROCEDURE DoDialog(DialogAdresse:ADDRESS;ErstesObject:INTEGER):INTEGER;
(****************** Dialog Box Ausführen *****************************)
(* DialogAdresse : Adresse des Dialoges, zu ermitteln mit *)
(* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
(* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*)
(* ErstesObject : Erstes Editierbares Object, dort steht dann der *)
(* Cursor im Edit Feld *)
(* Rückgabe : Das Feld das zum Verlassen der Box angeklickt wurde. *)
(* DoDialog zeichnet eine Dialogbox und führt Sie aus. Es werden *)
(* Grow- und Shrink-Boxen von der Cursor Position ab und am Ende zu *)
(* ihr hin Gezeichnet. Redraw Message wird ans GEM geschickt *)
(*********************************************************************)
PROCEDURE DoMoveDialog(DialogAdresse:ADDRESS;ErstesObject:INTEGER):INTEGER;
(****************** Dialog Box Ausführen *****************************)
(* DialogAdresse : Adresse des Dialoges, zu ermitteln mit *)
(* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *)
(* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*)
(* ErstesObject : Erstes Editierbares Object, dort steht dann der *)
(* Cursor im Edit Feld *)
(* Rückgabe : Das Feld das zum Verlassen der Box angeklickt wurde. *)
(* DoMoveDialog zeichnet eine verschiebbare Dialogbox und führt Sie *)
(* aus. Es werden keine Grow- und Shrink-Boxen gezeichnet *)
(* ihr hin Gezeichnet. Der Bildschirm wird selbsttätig renoviert *)
(* Der Dialog kann wie gewöhnlich im RCS erzeugt werden !!! *)
(* Als Schmankerln sind hier noch ein paar Erweiterungen eingebaut *)
(* 1.) Tastatursteuerung: wird Alt+Taste gedrückt so wird der Button *)
(* im Dialogbaum ausgeführt der als letztes(!) diese Taste in Groß- *)
(* buchstaben enthält. Dabei ist es gleichgültig ob der Buttontext *)
(* noch andere Großbuchstaben enthält. OK reagiert also auf Alt-O *)
(* und(!) auf Alt-K. *)
(* 2.) Checkboxes: Ein Object vom Typ GBox das die Hintergrundfarbe *)
(* schwarz hat und den Status crossed besitzt wird a) beim Aufruf *)
(* von DoMoveDialog invertiert so das es nun eine weiße Box mit *)
(* schwarzem Kreuz ist und b) wenn es im Dialog angeklickt wird mit *)
(* dem Status Checked+Selected belegt -> weiße Box *)
(* 3.) Wenn es kein DEFAULT-Object gibt wird mit ENTER bzw. RETURN *)
(* der nächste editierbare Eintrag angesprungen. *)
(*********************************************************************)
(* In der ST 6/92 'XObjects' ist beschrieben wie man die Unterstriche*)
(* u.a. erzeugt *)
(* ST 7,8/91 'Checkboxen unter GEM'gab die Anregung zu den Checkboxen *)
(* ST 2/92 Form_kebd & Form_Button in Maxon Pascal gaben die Anregung *)
(* zur Implementierung der Tastatursteuerung *)
PROCEDURE DrawDialog(DialogAdresse:ADDRESS);
(****************** Dialog Box ausgeben *****************************)
(* DialogAdresse : Adresse des Dialoges *)
(* DrawDialog zeichnet eine Dialogbox. Es wird eine *)
(* Grow-Box von der Cursor Position aus geöffnet. *)
(* Der Bildschirmhintergrund wird gesichert. *)
(* !!! DrawDialog und UndrawDialog niemals einzeln verwenden !! *)
(*********************************************************************)
PROCEDURE UndrawDialog(DialogAdresse : ADDRESS);
(****************** Dialog Box schliessen ***************************)
(* DialogAdresse : Adresse des Dialoges *)
(* UndrawDialog shliesst eine Dialogbox. Es wird eine *)
(* Shrink-Box zur Cursor Position hin gezeichnet. Der Bildschirm *)
(* wird restauriert oder ggf. eine Redraw Message ans GEM geschickt. *)
(* !!! DrawDialog und UndrawDialog niemals einzeln verwenden !! *)
(*********************************************************************)
PROCEDURE IsSelected(Index:INTEGER; TreePtr:ADDRESS ) : BOOLEAN;
(*********** Hat das Object Index den Status Selected ? ************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* Rückgabe: TRUE = Ist selectiert, FALSE = Nicht selectiert *)
(*******************************************************************)
PROCEDURE IsCrossed(Index:INTEGER; TreePtr:ADDRESS ) : BOOLEAN;
(*********** Hat das Object Index den Status Crossed ? *************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* Rückgabe: TRUE = Angekreuzt, FALSE = Nicht angekreuzt *)
(*******************************************************************)
PROCEDURE GetObjectFlags(Index:INTEGER; TreePtr:ADDRESS ) : INTEGER;
(************** Welche flags hat das Object Index *****************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* Rückgabe: flags *)
(* Mögliche Rückgaben sind None, Selectabel, default, Exit, .. *)
(* HideTree, Indirect. (Siehe GEMAESBase) *)
(*******************************************************************)
PROCEDURE SetObjectFlags(Index:INTEGER; TreePtr:ADDRESS; NewFlag:INTEGER );
(************** Setzt die flags des Objects Index *****************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* NewFlags: Dieses flag wird gesetzt. *)
(* Mögliche Angaben sind None, Selectabel, default, Exit, .. *)
(* HideTree. (Siehe GEMAESBase) *)
(* Die Routine wurde entwickelt um das Hidetree und Editable flag *)
(* zu Setzen d.h. um Einträge in DialogBoxen Unsichtbar zu Machen *)
(* oder EditFelder editierbar oder nichteditierbar zu machen *)
(*******************************************************************)
PROCEDURE GetObjectXYWH(Index:INTEGER; TreePtr:ADDRESS;VAR x,y,w,h:CARDINAL);
(************** Welchen Position hat das Object Index? *************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* x,y,w,h : Position des Objectes *)
(*******************************************************************)
PROCEDURE SetObjectXYWH(Index:INTEGER; TreePtr:ADDRESS;x,y,w,h:CARDINAL );
(************** Setze Position des Objectes Index *****************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* x,y,w,h : Neue Position des Objectes *)
(*******************************************************************)
PROCEDURE GetText(Index:INTEGER;TreePtr:ADDRESS; VAR String:ARRAY OF CHAR);
(************** Welchen Text hat das Object Index *****************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* String : Hier Kommt der Text rein. *)
(* Wurde zum einfachen Umgang mit Editfeldern in DialogBoxen *)
(* entwickelt. *)
(*******************************************************************)
PROCEDURE SetText(Index:INTEGER;TreePtr:ADDRESS; String:ARRAY OF CHAR);
(************** Setze den Text des Objects Index * *****************)
(* Index : Nummer des Objectes. *)
(* TreePtr: Adresse des Dialoges (s.o.) *)
(* String : Neuer Text, Er sollte nicht länger sein als der *)
(* Orginaltext der Dialogbox, sonst kommt es zu unangenehmen *)
(* Überraschungen ! *)
(* Wurde zum einfachen Umgang mit Editfeldern in DialogBoxen *)
(* entwickelt. *)
(*******************************************************************)
PROCEDURE GetObjectTail( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
PROCEDURE GetObjectHead( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
PROCEDURE GetNextObject( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
PROCEDURE GetObjectState( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
PROCEDURE GetObjectType( TreePtr:ADDRESS; Index :INTEGER ) : INTEGER;
PROCEDURE GetBoxColor(Index:INTEGER;TreePtr:ADDRESS):INTEGER;
PROCEDURE InitCheckBoxes(TreePtr : ADDRESS);
END EasyDialog.